package cl.vixionarios.biotika.mashup;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.NameValuePair;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.hibernate.validator.util.privilegedactions.GetClassLoader;
import org.jboss.logging.Logger;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

import cl.vixionarios.biotika.constantes.Aplicacion;
import cl.vixionarios.biotika.dao.DBManager;
import cl.vixionarios.biotika.servicio.datos.Medicamento;
import cl.vixionarios.biotika.util.proxy.Proxy;

public abstract class ListaMedicamento {
	
	
	public static List<Medicamento> obtenerMedicamentos(String nombre)
	{
		

		
		List<Medicamento> ltMed= new ArrayList<Medicamento>();
		
		Document doc;
		try {
			doc = Jsoup.connect(Aplicacion.urlLista+"?item=product&pattern="+nombre).get();
			Elements filas = doc.select("table#tbl_result  tbody tr");
			
			for(int i =0; i< filas.size();i++ )
			{
				//System.out.println(filas.get(i).html());
				ltMed.add(trE(filas.get(i).getElementsByTag("td")));
				
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	
		
		return ltMed;
		
		
	}
	
	private static Medicamento trE(Elements trs)
	{
		Medicamento medicamento= new Medicamento();
		
		
		Elements nombre =trs.get(0).getElementsByTag("a");
		
		Elements droga =trs.get(1).getElementsByTag("a");
		
		String medida= trs.get(2).text();
		
		Elements laboratorio= trs.get(3).getElementsByTag("a");
		
		String precio= trs.get(4).text();
		
		medicamento.setNombre(nombre.text());
		medicamento.setProducto(droga.text());
		medicamento.setPrecentacion(medida);
		medicamento.setLaboratorio(laboratorio.text());
		medicamento.setPrecio(precio);
		
		return medicamento;
	}
	
	
	
	
	public static void obtenerLocation()
	{
		
		int codigoEstablecimiento;
		String direccionEstablecimiento;
		String nombreComunaEstablecimiento;
		String regionEstablecimiento;
		String paisEstablecimiento;
		
		Connection c = DBManager.getConnection();
		
		PreparedStatement pstmt = null;
		ResultSet rs = null;

		String querySelect = "SELECT id_farmacia_turno, direccion, comuna, region , 'Chile'::character varying pais  FROM farmacia WHERE id_farmacia_turno > 5229 ";
		
		try
		{
			pstmt = c.prepareStatement(querySelect);
			rs = pstmt.executeQuery();
			
			
			while(rs.next())
			{
				codigoEstablecimiento = rs.getInt("id_farmacia_turno");
				direccionEstablecimiento = rs.getString("direccion");
				nombreComunaEstablecimiento = rs.getString("comuna");
				regionEstablecimiento = rs.getString("region");
				paisEstablecimiento = rs.getString("pais");
				
				List<NameValuePair> qparams = new ArrayList<NameValuePair>();
				qparams.add(new BasicNameValuePair("q",direccionEstablecimiento + " , " + nombreComunaEstablecimiento + " , "+ regionEstablecimiento + " , " + paisEstablecimiento));
				qparams.add(new BasicNameValuePair("output","csv"));

				String buscar=Proxy.doGet(Aplicacion.urlLocation, qparams);
				
				String [] location = buscar.split(",");
				
				insertarLocation(codigoEstablecimiento, location[2], location[3], c);
			}
			
			DBManager.closeOnSuccess(c);
		}catch (SQLException ex) {
			System.out.println("[agregarComentario][" + ex.getMessage() + "]");
		}
		catch (Exception ex) {
			System.out.println("[agregarComentario][" + ex.getMessage() + "]");
		}finally{
			if(pstmt!=null){
				try{
					pstmt.close();
				}
				catch(SQLException ex){
					System.out.println("[agregarComentario][" + ex.getMessage() + "]");
				}
			}
			if(rs!=null){
				try{
					rs.close();
				}
				catch(SQLException ex){
					System.out.println("[agregarComentario][" + ex.getMessage() + "]");
				}
			}
		}
	}
	
	public static void insertarLocation(int codigoEstablecimiento, String latitud, String longitud, Connection c)
	{
		PreparedStatement pstmt = null;
		
		int resp = -1;
		
		String querySelect = "UPDATE farmacia SET latitud=?, longitud=? WHERE id_farmacia_turno = ? ";
		
		try
		{
			pstmt = c.prepareStatement(querySelect);
			pstmt.setString(1, latitud);
			pstmt.setString(2, longitud);
			pstmt.setInt(3, codigoEstablecimiento);
			resp = pstmt.executeUpdate();
			
		}catch (SQLException ex) {
			System.out.println("[insertarLocation][" + ex.getMessage() + "]");
		}
		catch (Exception ex) {
			System.out.println("[insertarLocation][" + ex.getMessage() + "]");
		}finally{
			if(pstmt!=null){
				try{
					pstmt.close();
				}
				catch(SQLException ex){
					System.out.println("[insertarLocation][" + ex.getMessage() + "]");
				}
			}
		}
	}
	

}
